---
title: FutureProvider
version: 1
---

import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import CodeBlock from "@theme/CodeBlock";
import configProvider from "/docs/providers/future_provider/config_provider";
import configConsumer from "/docs/providers/future_provider/config_consumer";
import { trimSnippet,AutoSnippet} from "../../../../../src/components/CodeSnippet";

`FutureProvider` est l'équivalent de [Provider] mais pour du code asynchrone.

`FutureProvider` est typiquement utilisé pour :

- l'exécution et la mise en cache d'opérations asynchrones (telles que les requêtes réseau)
- gérer correctement les états d'erreur/de chargement des opérations asynchrones
- la combinaison de plusieurs valeurs asynchrones en une autre valeur

`FutureProvider` gagne considérablement à être combiné avec [ref.watch]. 
Cette combinaison permet de récupérer automatiquement quelques données lorsque 
certaines variables changent, ce qui garantit que nous avons toujours la valeur 
la plus récente.

:::info
`FutureProvider` ne propose pas de moyen de modifier directement le calcul 
après l'interaction de l'utilisateur. Il est conçu pour résoudre des cas d'utilisation simples. 
Pour des scénarios plus avancés, envisagez d'utiliser [StateNotifierProvider].
:::

## Exemple d'utilisation : lecture d'un fichier de configuration

`FutureProvider` peut être un moyen pratique d'exposer un objet `Configuration`. 
créé par la lecture d'un fichier JSON.

La création de la configuration se fait avec la syntaxe async/await typique. 
mais à l'intérieur du provider. En utilisant le système d'asset de Flutter, ce serait :

<AutoSnippet language="dart" {...configProvider}></AutoSnippet>

Ensuite, l'interface utilisateur peut écouter les configurations comme suit :

<AutoSnippet language="dart" {...configConsumer}></AutoSnippet>


Cela permettra de reconstruire automatiquement l'interface utilisateur 
lorsque le [Future] sera terminé. En même temps, 
si plusieurs widgets veulent les configurations, l'asset ne sera décodé qu'une seule fois.

Comme vous pouvez le voir, écouter un `FutureProvider` à l'intérieur d'un widget retourne une 
[AsyncValue] - qui permet de gérer les états d'erreur/de chargement.

[ref.watch]: ../concepts/reading#using-refwatch-to-observe-a-provider
[statenotifierprovider]: ./state_notifier_provider
[provider]: ./provider
[asyncvalue]: https://pub.dev/documentation/riverpod/latest/riverpod/AsyncValue-class.html
[future]: https://api.dart.dev/dart-async/Future-class.html
[family]: ../concepts/modifiers/family
